//
//  main.m
//  OC02_方法
//
//  Created by dllo on 15/12/1.
//  Copyright © 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "CollegeStudent.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        
# pragma mark - 知识点1 OC的方法语法
        
        /** 
         * OC 方法 分 '+'类方法和 '-'对象方法
         * 类方法当中不能有实例变量
         * !!!! 使用方法时必须明确方法是类方法还是对象方法
         */
        
//        - (NSString *)substringFromIndex:(NSUInteger)anIndex
        
        /** 上面的方法.其中
         * '-' 说明是对象方法,只能对象调用此方法!!!
         * 返回值类型为NSString * (字符串)
         * 'substringFromIndex' 参数的形容词
         * ':' 说明后边有参数
         * '(NSUInteger)'  参数类型
         * 'anIndex' 参数名
         * 方法名 substringFromIndex:  (注意  带冒号)
         */
        
        
//        - (void)insertString:(NSString *)aString atIndex:(NSUInteger)anIndex
        
# pragma mark - 知识点2 setter , getter方法
        
        /** 
         * 实例变量默认的可见度为受保护(@protect), 外部不能直接访问(赋值和取值)
         * 通过方法间接地对实例变量进行访问
         * 涉及到两个方法, 即 赋值方法(setter) 和 取值方法(getter)
         */
        
        
        /* 创建对象 */
        
        Person *per1 = [[Person alloc] init];
        
        /** 通过setter getter 方法 访问实例变量*/
        [per1 setName:@"zhangsan"];
        [per1 setAge:20];
        [per1 setSex:@"male"];
        
        NSLog(@"name:%@",[per1 name]);
        NSLog(@"age:%ld", [per1 age]);
        NSLog(@"sex:%@", [per1 sex]);
        
# pragma mark - 知识点3 继承
        /** 注意  子类继承父类所有的实例变量和方法. 实例变量可见度为@private, 同样继承下来 */
        
        /* Student类 继承于Person类  */
        Student *stu = [[Student alloc]init];
        [stu setName:@"Tom"];
        [stu setAge:19];
        [stu setSex:@"male"];
        [stu setSchool:@"Lanou"];
        [stu setNumber:1];
        [stu study];
        
        /*创建对象*/
        CollegeStudent *cstu = [[CollegeStudent alloc]init];
        [cstu study];
        
# pragma mark 知识点4 - 初始化方法(详见Person类)
        
        /** 创建一个对象 Person,并且实例变量赋值 */
        Person *person5 = [[Person alloc]init];
        [person5 setName:@"zhangsan"];
        [person5 setAge:20];
        [person5 setSex:@"male"];
        
        Person *person6 = [[Person alloc]initWithName:@"Lisi" age:18 sex:@"male"];
        
        
# pragma mark 知识点5 - 便利构造器方法(详见Person类)
        
        
        Person *person7 = [Person personWithName:@"Lisi" age:18 sex:@"female"];
        
        Person *person8 = [Person person];
        
    }
    return 0;
}
